import java.util.Scanner;

public class text2 {
    /*几张卡牌 排成一行，每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。
    每次行动，你可以从行的开头或者末尾拿一张卡牌，最终你必须正好拿 k 张卡牌。
    你的点数就是你拿到手中的所有卡牌的点数之和。
    给你一个整数数组 cardPoints 和整数 k，请你返回可以获得的最大点数。*/
    public static int seeknumberadd(int[] cardPoints,int k) {
        int n=cardPoints.length;
        int sum=0;
        //初始化窗口总值
        for(int i=0;i<k;i++){
            sum+=cardPoints[i];
        }
        //更新最有解
        int result=sum;
        for(int i=1;i<=k;i++){
            sum+=cardPoints[n-i]-cardPoints[k-i];
            //从右边拿一张牌，从左边补一张牌，因为最优解已经初始化为
            //初始窗口值，后续的结果也就是二牌之差在加上sum,即为最优解
            //完美遍历每种组合
            result=Math.max(result,sum);
            //得出最优解
        }
        return result;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入卡牌数：");
        int n=sc.nextInt();
        int[] cardpoints=new int[n];
        for(int i=0;i<n;i++){
            cardpoints[i]=sc.nextInt();
        }
        int k=sc.nextInt();
        int result=seeknumberadd(cardpoints,k);
        System.out.println(result);
        sc.close();
    }
}
